package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Disciplina;
import ControleAcademico.Model.Pojo.HistoricoDisciplina;

public class HistoricoDisciplinaImpl implements HistoricoDisciplinaDao{
	
	private AlunoImpl alunoImpl;
	private DisciplinaImpl disciplinaImpl;
	private ArrayList<HistoricoDisciplina> listaDeHistoricoDisciplinas;
	
	public HistoricoDisciplinaImpl(){
		listaDeHistoricoDisciplinas = new ArrayList<HistoricoDisciplina>();
	}
	
	public void setListaDeHistoricoDisciplinas(
			ArrayList<HistoricoDisciplina> listaDeHistoricoDisciplinas) {
		this.listaDeHistoricoDisciplinas = listaDeHistoricoDisciplinas;
	}
	
	@Override
	public void salvar (HistoricoDisciplina historicoDisciplina, int flag)  {
		
		try{	
					
			if (flag != -1) { 	//salva na lista
				listaDeHistoricoDisciplinas.add(historicoDisciplina);	
			} else {			//salva no arquivo
				
				PrintWriter p = new PrintWriter("HistoricoDisciplina.txt");
						
				for(HistoricoDisciplina i : listaDeHistoricoDisciplinas){
					
					p.write(i.getId()+"\t");
					p.write(i.getNota()+"\t");
					p.write(i.getAprovacao()+"\t");
					p.write ("Aluno\t");
					p.write (i.getAluno().getId()+"\t");
					p.write ("Disciplina\t");
					p.write (i.getDisciplina().getId()+"\t");
					p.write("#");	
					p.write("\n");
				}
				p.close();
			}
		}
		catch(Exception e){
			
		}
	}
	
	public void adicionarHistoricoDisciplina(HistoricoDisciplina historicoDisciplina){
		listaDeHistoricoDisciplinas.add(historicoDisciplina);
	}
	
	public ArrayList<HistoricoDisciplina> getHistoricoDisciplina(){
		return listaDeHistoricoDisciplinas;
	}
	
	
	public ArrayList<HistoricoDisciplina> pesquisarHistoricoDisciplina(Aluno aluno){
		ArrayList<HistoricoDisciplina> historicoDisciplina = new ArrayList<HistoricoDisciplina>();
		
		for(HistoricoDisciplina i:listaDeHistoricoDisciplinas){
			if(i.getAluno().getCpf().equals(aluno.getCpf())){
				historicoDisciplina.add(i);
			}
		}
		
		return historicoDisciplina;
		
		
	}
	
	public HistoricoDisciplina pesquisarArquivo(int id){
		String linha;
		HistoricoDisciplina historicoDisciplina = null;
		try{
			FileReader reader = new FileReader("HistoricoDisciplina.txt");    	
			
			
	        BufferedReader leitor = new BufferedReader(reader);
	        
	        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");
	        	if(dados[0].equals(id+"")){
	        		historicoDisciplina = new HistoricoDisciplina(Integer.parseInt(dados[0]));
	        		return historicoDisciplina;
	        	}
	        }
		}catch(Exception e){
			
		}
		
        return historicoDisciplina;
		
	}
	@Override
	public void carregar() {
		
	      String linha = null; 
	      
	      try {  
	    	 FileReader reader = new FileReader("HistoricoDisciplina.txt");    	
	         BufferedReader leitor = new BufferedReader(reader);  
	         Aluno aluno;
	         Disciplina disciplina;
	         HistoricoDisciplina historicoDisciplina=null;
	          
	         while ((linha = leitor.readLine()) != null) {  
	            String[] dados = linha.split("\t");
	            int identificador = Integer.parseInt(dados[0]);
	            
	            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
	            	historicoDisciplina = new HistoricoDisciplina (Integer.parseInt(dados[0]));
	            	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[4]));
	            	disciplina = disciplinaImpl.pesquisarArquivo(Integer.parseInt(dados[6]));
	            	disciplinaImpl.adicionarDisciplina(disciplina);
	            	historicoDisciplina.setAluno(aluno);
	 	            historicoDisciplina.setDisciplina(disciplina);
	 	            historicoDisciplina.setAprovacao(dados[2]);
	 	            historicoDisciplina.setNota(Double.parseDouble(dados[1]));
	 	           listaDeHistoricoDisciplinas.add(historicoDisciplina);
	            }else{
	            	for (HistoricoDisciplina i : listaDeHistoricoDisciplinas) {
						if (i.getId() == identificador){
							historicoDisciplina = i;
						}
					}
	            	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[3]));
	            	disciplina = disciplinaImpl.pesquisarArquivo(Integer.parseInt(dados[6]));
	            	disciplinaImpl.adicionarDisciplina(disciplina);
	            	historicoDisciplina.setAluno(aluno);
	 	            historicoDisciplina.setDisciplina(disciplina);
	 	            historicoDisciplina.setAprovacao(dados[2]);
	 	            historicoDisciplina.setNota(Double.parseDouble(dados[1]));
	            }
	         }  
	         leitor.close();  
	         reader.close();  
	      } catch (Exception e) { 
	  
	      }  
	  }
	
	public void setAlunoImpl(AlunoImpl alunoImpl) {
		this.alunoImpl = alunoImpl;
	}

	public void setDisciplinaImpl(DisciplinaImpl disciplinaImpl) {
		this.disciplinaImpl = disciplinaImpl;
	}
	
	public boolean pesquisarNaListaImpl(int id){
		
		for (HistoricoDisciplina historicoDisciplina: listaDeHistoricoDisciplinas) {
			if (historicoDisciplina.getId() == id){
				return true;		
			}
		}
		return false;
	}
	
	public HistoricoDisciplina pesquisarHistoricoDisciplina(int id){
		HistoricoDisciplina historicoDisciplina = null;
		for (HistoricoDisciplina i : listaDeHistoricoDisciplinas) {
			if (i.getId() == id){
				historicoDisciplina = i;
				return historicoDisciplina;		
			}
		}
		return historicoDisciplina;
	}
}
